//js数据类型都有那些

//ECMAScript规范
/*
*   "原始值"类型(基本数据类型/值类型)
*       number: NaN\Infinity\正常数字
*       string: 正常字符串\模版字符串
*       boolean: true
*       null: 空 [object]  //缺少一个对象?
*       undefined: 未定义
*       symbol: 唯一值 ES6
*       bigInt: 大数
*
*
*
*   对象数据类型(引用数据类型)
*       object:
*           {}: 纯对象
*           []: Array
*           /^$/: regExp
*           new Date
*           ...
*       function : 函数类型(可执行对象)
*
* */

//数据类型判断
/*
*   typeof
*   instanceof
*   constructor
*   Object.prototype.toString.call()
*   --------
*   Array.isArray
*   -------
*    JQ ===> toType()//万能
*           isFunction
*           isWindow
*           isObject
*           isEmptyObject
*           isArrayLike
*
*
* */

/*
*
*   object是js中所有数据的 基类
*  ECMA规范里 所有可以调用call方法的都可以认为是一个  "可执行对象"
* 可执行对象(普通方法/箭头函数/构造函数/生成器函数)
*
*   typeof检测基本数据类型, 返回数据类型 除了(null--> "object"
*   typeof检测对象数据类型,除了可执行对象返回"function",其余的都是"object";
*
*   typeof null ==> c++
*
*   所有的数据类型,在计算机中都是以二进制值的方式存储的
*
*   整数: 1
*   浮点数: 010
*   字符串: 100
*   布尔: 110
*   对象: 000
*   undefined: -2^30
*
*   null : 000000
*
*
*   null--> "object"
*
*   typeof底层机制其实就是判断这些二进制,如果是以000开头 那么根据":排除函数" 返回就是"object"
*      typeof稳定性和性能是最好的. 用起来也简单.所以 typeof经常用
*
* */

// ----
/*
* 腾讯初级前端面试题
*
* typeof typeof typeof []
*
*
*
* */



/*let str =  "s";
str =  's';
str = `${1+1}`;*/


// "A" === "A"; true
// Symbol("A") === Symbol("A"); false
// let obj = {
//     [Symbol("AA")]: 100
// };
// Symbol.toStringTag: Object.prototype.toString.call()
// Symbol.iterator:  for of循环的底层处理方法
// ....


console.log(Number.MAX_SAFE_INTEGER);//9007199254740991 最大安全数字
console.log(Number.MIN_SAFE_INTEGER);//-9007199254740991 最小安全数字
